/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import io.RepuestosServicesMotoEntregaDTO;
import java.sql.*;
import java.sql.Date;
import java.util.ArrayList;


/**
 *
 * @author Acer
 */
public class MySQLRepuestosServicesMotoEntregaDAO {
    
   /**
     * Este metodo devuelve una lista de todas las ventas que sean de un determinado tipo
     * este tipo puede ser Repuestos o Services o cuotas de moto
     * @param fecha
     * @param tipo
     * @return
     * @throws DAOException 
     */ 
     

   public ArrayList<RepuestosServicesMotoEntregaDTO> listarRepuestosServicesMotoEntrega(Date fecha ,String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select nombre,descripcion,tipo,precio,entrega,fecha from venta cross join persona where venta.idCliente=persona.id and fecha= '"+fecha+"' and tipo = '"+tipo+"'");
            ArrayList<RepuestosServicesMotoEntregaDTO> listaRepuestosServicesMotoEntrega = new ArrayList();
              while (rs.next()) {
                  RepuestosServicesMotoEntregaDTO repuestoServicesMotoEntrega = new RepuestosServicesMotoEntregaDTO(rs.getString("nombre"), rs.getString("descripcion") , rs.getString("tipo"), Double.parseDouble(rs.getString("precio")),Double.parseDouble(rs.getString("entrega")),Date.valueOf(rs.getString("fecha")));
                   listaRepuestosServicesMotoEntrega.add(repuestoServicesMotoEntrega);
                 
                }
             rs.close();
            return listaRepuestosServicesMotoEntrega;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos Gestoria", e);
        }
        finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
   
    public ArrayList<RepuestosServicesMotoEntregaDTO> listarRepuestosServicesCuotas(Date fecha ,String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select idCuota, montoPagado, fechaPago, monto, nombre, p.observaciones,tipo FROM pago p, cuota, plan, venta, persona WHERE p.idcuota = cuota.id && cuota.idPlan = plan.idPlan && plan.idVenta = venta.id && venta.idCliente = persona.id && fechaPago= '"+fecha+"' && tipo = '"+tipo+"'");
            ArrayList<RepuestosServicesMotoEntregaDTO> listaRepuestosServicesCuotas = new ArrayList();
              while (rs.next()) {
                  RepuestosServicesMotoEntregaDTO repuestoServicesCuotas = new RepuestosServicesMotoEntregaDTO(rs.getString("nombre"), rs.getString("p.observaciones") , rs.getString("tipo"), Double.parseDouble(rs.getString("monto")),Double.parseDouble(rs.getString("montoPagado")),Date.valueOf(rs.getString("fechaPago")));
                   listaRepuestosServicesCuotas.add(repuestoServicesCuotas);
                 
                }
             rs.close();
            return listaRepuestosServicesCuotas;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos listarRepuestosServicesCuotas", e);
        }
        finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
   
   /**
    * este metodo calcula el total de las ventas del tipo que se le pasa como parametro
    * (puede ser cuotas de moto, repuestos o services, de la fecha que se le pasa como parametro)
    * @param fecha
    * @param tipo
    * @return
    * @throws DAOException 
    */
    public double totalRepuestosServicesMotoEntrega(Date fecha , String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select entrega from venta where fecha='"+fecha+"' and tipo='"+tipo+"'");
            double totalRepuestosServicesMotoEntrega = 0.0;
            while (rs.next()) {
              totalRepuestosServicesMotoEntrega = totalRepuestosServicesMotoEntrega + rs.getDouble("entrega");
            }
            rs.close();
           return totalRepuestosServicesMotoEntrega;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }/**
     * 
     * @param fecha
     * @param tipo
     * @return
     * @throws DAOException 
     */
     public double totalRepuestosServicesCuota(Date fecha , String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select montoPagado FROM pago p, cuota, plan, venta, persona WHERE activo = 1 && p.idcuota = cuota.id && cuota.idPlan = plan.idPlan && plan.idVenta = venta.id && venta.idCliente = persona.id && fechaPago= '"+fecha+"' && tipo = '"+tipo+"'");
            double totalRepuestosServicesCuota = 0.0;
            while (rs.next()) {
              totalRepuestosServicesCuota = totalRepuestosServicesCuota + rs.getDouble("montoPagado");
            }
            rs.close();
            System.out.println(totalRepuestosServicesCuota);
            return totalRepuestosServicesCuota;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
  
    public ArrayList<RepuestosServicesMotoEntregaDTO> buscarRepuestosServicesMotoEntrega(RepuestosServicesMotoEntregaDTO repuestosServicesMotoEntrega, String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select nombre,descripcion,tipo,precio,entrega,fecha from venta , persona where venta.idCliente=persona.id and lower(nombre) like lower('%"+ repuestosServicesMotoEntrega.getNombre() + "%')and lower(descripcion) like lower('%" + repuestosServicesMotoEntrega.getDescripcion() + "%')and lower(fecha) like lower('%" + repuestosServicesMotoEntrega.getFecha() + "%')and tipo = '"+tipo+"' ");// 
            ArrayList<RepuestosServicesMotoEntregaDTO> lista = new ArrayList();
            while (rs.next()) {
                RepuestosServicesMotoEntregaDTO repuestosServicesMotoEntregaDTO = new RepuestosServicesMotoEntregaDTO(rs.getString("nombre"), rs.getString("descripcion"),rs.getString("tipo"), Double.valueOf(rs.getString("precio")), Double.valueOf(rs.getString("entrega")),Date.valueOf(rs.getString("fecha")));
                lista.add(repuestosServicesMotoEntregaDTO);}
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos Gestoria", e);  
    } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }    
    
  /**
     * Busca segun la descripcion o el nombre del cliente
     * todas las cuotas pertenecientes a un repuesto
     * @param repuestosServicesMotoEntrega
     * @param tipo
     * @return
     * @throws DAOException 
     */
   public ArrayList<RepuestosServicesMotoEntregaDTO> buscarRepuestosServicesMotoCuota(RepuestosServicesMotoEntregaDTO repuestosServicesMotoEntrega, String tipo) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();  //select nombre,descripcion,tipo,precio,entrega,fecha from venta cross join persona where venta.idCliente=persona.id and lower(nombre) like lower('%"+ repuestosServicesMotoEntrega.getNombre() + "%')and lower(descripcion) like lower('%" + repuestosServicesMotoEntrega.getDescripcion() + "%')and lower(fecha) like lower('%" + repuestosServicesMotoEntrega.getFecha() + "%')and tipo = '"+tipo+"' ");// 
            ResultSet rs = stat.executeQuery("select nombre,p.observaciones,tipo,cuota.monto,p.montoPagado,fechaPago from pago p, cuota, plan, venta, persona WHERE p.idcuota = cuota.id and cuota.idPlan = plan.idPlan and plan.idVenta = venta.id and venta.idCliente = persona.id  and lower(nombre) like lower('%"+ repuestosServicesMotoEntrega.getNombre() + "%')and lower(p.observaciones) like lower('%" + repuestosServicesMotoEntrega.getDescripcion() + "%')and lower(fechaPago) like lower('%" + repuestosServicesMotoEntrega.getFecha() + "%')and tipo = '"+tipo+"' ");// 
            ArrayList<RepuestosServicesMotoEntregaDTO> lista = new ArrayList();
            while (rs.next()) {
                RepuestosServicesMotoEntregaDTO repuestosServicesMotoEntregaDTO = new RepuestosServicesMotoEntregaDTO(rs.getString("nombre"), rs.getString("p.observaciones"),rs.getString("tipo"), Double.valueOf(rs.getString("cuota.monto")), Double.valueOf(rs.getString("p.montoPagado")),Date.valueOf(rs.getString("fechaPago")));
                lista.add(repuestosServicesMotoEntregaDTO);}
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer desde la base de datos Gestoria", e);  
    } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    } 
}
